跳到主要内容

echo 命令的各种效果

echo 命令

echo 命令用于在 shell 中打印 shell 变量的值,或者直接输出指定的字符串,这个没啥好讲,但是这里主要介绍几个参数

-n 不换行输出

-e:激活转义字符。

这里不换行输出:

$echo -n "123"
$echo "456"

最终输出

123456

这个一般用做同时输出两个命令时

echo -n "The time and date are: "
date
#输出: The time and date are: Fri 11 Feb 2022 09:47:53 AM CST

-e 的使用 ⭐

使用 -e 选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

如下的特殊效果

\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;

打印带颜色的文字

用 echo 命令打印带有色彩的文字:

echo -e "\e[1;31mThis is red text\e[0m"

上面的命令意思:

\e[1;31m   将颜色设置为红色
\e[0m 将颜色重新置回

解释下如何使用:

  • \033[:转义序列的开始。其中 \033 代表Esc符号,也可以使用 \E\e 来代替。
  • \033[颜色1;颜色2m:称为转义序列,它本身是一个整体,中间不要有空格。
  • 颜色1和颜色2:表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
  • m:转义序列的终止标志。
  • \033[0m:表示将颜色恢复回原来的配色。

用一张原理图来理解:

所涉及的颜色如下(注意,数字 0 表示重置):

使用背景色

背景色:

echo -e "\e[1;42mGreed Background\e[0m"

颜色码:

  • 重置=0
  • 黑色=40
  • 红色=41
  • 绿色=42
  • 黄色=43
  • 蓝色=44
  • 洋红=45
  • 青色=46
  • 白色=47

文字闪动效果

echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"

下图是会闪的:

红色数字处还有其他数字参数:

  • 0 关闭所有属性
  • 1 设置高亮度(加粗)
  • 4 下划线
  • 5 闪烁
  • 7 反显
  • 8 消隐

编写成脚本,用时直接复制

#!/bin/sh
#定义颜色变量
RED='\E[1;31m' # 红
GREEN='\E[1;32m' # 绿
YELOW='\E[1;33m' # 黄
BLUE='\E[1;34m' # 蓝
PINK='\E[1;35m' # 粉红
SHAN='\E[33;5m' # 黄色闪烁警示
RES='\E[0m' # 清除颜色

#用echo -e来调用
#黄色闪烁警示调用效果
echo -e "${SHAN} this is yelow flashing warning ${RES}"
echo -e "${GREEN} this is green color ${RES}"
echo -e "${YELOW} this is red yelow ${RES}"
echo -e "${BLUE} this is blue color ${RES}"
echo -e "${PINK} this is pink color ${RES}"

定义颜色变量

#!/bin/sh
#定义颜色变量
RED='\E[1;31m' # 红
GREEN='\E[1;32m' # 绿
YELOW='\E[1;33m' # 黄
BLUE='\E[1;34m' # 蓝
PINK='\E[1;35m' # 粉红
RES='\E[0m' # 清除颜色

#用echo -e来调用
echo -e "${RED} this is red color ${RES}"
echo -e "${GREEN} this is green color ${RES}"
echo -e "${YELOW} this is red yelow ${RES}"
echo -e "${BLUE} this is blue color ${RES}"
echo -e "${PINK} this is pink color ${RES}"

打印的效果

定义颜色动作

#!/bin/sh
#定义颜色动作, 把echo -en也定义到变量中
SETCOLOR_SUCCESS="echo -en \\E[1;32m"
SETCOLOR_FAILURE="echo -en \\E[1;31m"
SETCOLOR_WARNING="echo -en \\E[1;33m"
SETCOLOR_NORMAL="echo -en \\E[0;39m"

#使用时直接调用颜色动作即可
$SETCOLOR_SUCCESS && echo SUCCESS
$SETCOLOR_FAILURE && echo FAILURE
$SETCOLOR_WARNING && echo WARNING
$SETCOLOR_NORMAL && echo NORMAL

说明:

定义颜色动作的方法和定义颜色变量的方法的思路类似,唯一不同的是我们把 echo 也加入到了定义中。这样用时不用频繁输入 echo 了,不过,需要注意其中的一些细节:

1)需要增加 -n 选项,这样引用时不会出现换行的问题。

2)\\ 本质是 \,在双引号中反斜线符号一定要写成 \\

3)引用变量要放到其他语句前面,并使用 && 连接。

显示命令执行结果

# 注意:这里使用的是 `
echo `date`

结果将显示当前日期

Tue 15 Jun 2021 03:36:37 PM CST

Reference

echo 在shell及脚本中显示色彩及闪烁警告效果